/**
 * Bestpay.com.cn Inc.
 * Copyright (c) 2011-2019 All Rights Reserved.
 */
package com.suxiaoxiao.springbootlearn.spring.framework.listeners;

import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * desc
 *
 * @author zhaorongzhang
 * @version MySpringApplicationRunListeners.java, v 0.1 2019/12/26 11:09 下午 zhaorongzhang Exp $$
 */
public class MySpringApplicationRunListeners implements SpringApplicationRunListener {

    /**
     * 首次启动run方法时立即调用。可用于非常早期的初始化。
     */
    @Override
    public void starting() {
        System.out.println("starting...");
    }

    /**
     * 准备好环境（Environment构建完成），但在创建ApplicationContext之前调用。
     * @param environment
     */
    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        System.out.println("environmentPrepared...");
    }

    /**
     * 在创建和构建ApplicationContext之后，但在加载之前调用。
     * @param context
     */
    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("contextPrepared...");
    }

    /**
     * ApplicationContext已加载但在刷新之前调用。
     * @param context
     */
    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("contextLoaded...");
    }

    /**
     * ApplicationContext已刷新，应用程序已启动，但尚未调用CommandLineRunners和ApplicationRunners。
     * @param context
     */
    @Override
    public void started(ConfigurableApplicationContext context) {
        System.out.println("started...");
    }

    /**
     * 在运行方法彻底完成之前立即调用，刷新ApplicationContext并调用所有CommandLineRunners和ApplicationRunner。
     * @param context
     */
    @Override
    public void running(ConfigurableApplicationContext context) {
        System.out.println("running...");
    }

    /**
     * 在运行应用程序时失败时调用。
     * @param context
     * @param exception
     */
    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        System.out.println("failed...");
    }

}